import { formRequiredIsFilled } from '@/utils'
import { ElMessage } from 'element-plus'
import { ref } from 'vue'

export default function (
  fieldList: any,
  formDataTable: any,
  fieldFormRef: any,
  actionFormRef: any,
  tableFormRules: any,
  fieldFormRules: any,
  actionList: any,
  formDataField: any,
  actionFormRules: any,
  formDataAction: any
) {
  const tableFormRef = ref()
  const currentTab = ref('1')

  /**
   * 在标签页离开前执行的函数
   *
   * 在用户尝试离开当前标签页时，该函数会被触发。
   * 它会调用 validateFormAndShowTip 函数来验证表单并显示提示信息。
   */
  function beforeTabLeave () {
    return validateFormAndShowTip()
  }

  /**
   * 在切换标签页前执行的验证函数
   *
   * @returns 验证结果，返回true表示验证通过，返回false表示验证失败
   */
  function validateFormAndShowTip (isSubmit = false) {
    let from = currentTab.value
    if (from == '1') {
      // 验证table表单是否已经填写
      tableFormRef.value.validate()
      // 提交状态下，验证是否添加了字段
      if (isSubmit) {
        if (fieldList.value.length == 0) {
          ElMessage.error('至少新增一个字段')
          return false
        }
      }
      // 验证必填字段表单是否已经填写
      return formRequiredIsFilled(tableFormRules, formDataTable.value)
    }
    if (from == '2') {
      // fieldList长度为0，则直接返回false
      if (fieldList.value.length == 0) {
        ElMessage.error('至少新增一个字段')
        return false
      }
      // fieldList长度不为0，没有打开的表单，直接通过
      if (!fieldFormRef.value) {
        return true
      } else {
        // fieldList长度不为0，有打开的表单，验证当前表单是否已经填写
        fieldFormRef.value.validate()
        return formRequiredIsFilled(fieldFormRules, formDataField.value)
      }
    }
    if (from == '3') {
      // 验证table表单是否已经填写
      actionFormRef.value && actionFormRef.value.validate()
      // 提交状态下，验证是否添加了字段
      if (isSubmit) {
        if (fieldList.value.length == 0) {
          ElMessage.error('至少新增一个字段')
          return false
        }
      }
      // 没添加action，直接通过
      if (actionList.value.length == 0) {
        return true
      } else {
        // 验证必填字段表单是否已经填写
        return formRequiredIsFilled(actionFormRules, formDataAction.value)
      }
    }
  }
  return {
    beforeTabLeave,
    validateFormAndShowTip,
    tableFormRef,
    currentTab,
  }
}
